﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MetroTemplate.Model
{
    public class ArticleModel : Interfaces.IBaseClass
    {

        private long _ArticleId;

        private string _Libelle;

        private double _Quatite;
        
        private double _PrixUnitaire;

        public long ArticleId
        {
            get
            {
                return _ArticleId;
            }
            set
            {
                if (_ArticleId == value)
                    return;
                _ArticleId = value;
                RaiseChangedEvent("ArticleId");
            }
        }

        public string Libelle
        {
            get
            {
                return _Libelle;
            }
            set
            {
                if (_Libelle == value)
                    return;
                _Libelle = value;
                RaiseChangedEvent("Libelle");
            }
        }

        public double Quatite
        {
            get
            {
                return _Quatite;
            }
            set
            {
                if (_Quatite == value)
                    return;
                _Quatite = value;
                RaiseChangedEvent("Quatite");
            }
        }
        public double PrixUnitaire
        {
            get
            {
                return _PrixUnitaire;
            }
            set
            {
                if (_PrixUnitaire == value)
                    return;
                _PrixUnitaire = value;
                RaiseChangedEvent("PrixUnitaire");
            }
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }

        public object Clone()
        {
            throw new NotImplementedException();
        }

        #region Events
        /// <summary>
        /// Permet de déclancher l'évenement PropertyChanged
        /// </summary>
        /// <param name="paramname">Le nom de la propriété modifiée</param>
        private void RaiseChangedEvent(string paramname)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(paramname));
            }
        }

        /// <summary>
        /// Permet de déclanché l'évenement PropertyChanging
        /// </summary>
        /// <param name="paramname">Le nom de la propriété en cours de changement</param>
        private void RaiseChangingEvent(string paramname)
        {
            if (PropertyChanging != null)
            {
                PropertyChanging(null, new System.ComponentModel.PropertyChangingEventArgs(paramname));
            }
        }

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

        public event System.ComponentModel.PropertyChangingEventHandler PropertyChanging;
        #endregion
    }
}
